library(tidyquant)
library(tidyverse)
library(tsibble)
library(fable)
library(feasts)
index = tq_index("SP500") %>% select(symbol, weight)
index = index %>% filter(symbol != "-")
index
sum(index$weight)

data = tq_get(index$symbol, get = "stock.prices", from = "2023-01-01", to = "2024-03-29") %>% select(symbol, date, adjusted)
library(readxl)
sectores <- read_excel("Proyecto_2/sectores.xlsx")
index = left_join(index, select(Sector, c(Symbol, Sector)), by = join_by(symbol == Symbol))
index %>% filter(if_any(everything(), is.na))
symbols_from_data = unique(data$symbol)
data = pivot_wider(data, id_cols = date, names_from = symbol, values_from = adjusted)
data = mutate(data, t = row_number())
data = pivot_longer(data, all_of(symbols_from_data), names_to = "symbol", values_to = "adjusted")
data = data %>% group_by(symbol) %>% mutate(t = row_number())
data = as_tsibble(data, index = t, key = symbol)
data
data = left_join(data, index, by = join_by(symbol == symbol))
data
data = as_tsibble(data, index = t, key = symbol)
data = data %>% mutate(portafolio = adjusted*weight*100)
fcasts_symbol <- data %>%
  model(arima = ARIMA(adjusted)) %>%
  forecast(h = 20)
Warning: NaNs producedWarning: NaNs producedWarning: NaNs producedWarning: NaNs producedWarning: NaNs producedWarning: NaNs produced
fcasts_symbol
fcasts_symbol = left_join(fcasts_symbol, select(index, c(symbol,weight, Sector)), by = join_by(symbol == symbol))
fcasts_symbol = fcasts_symbol %>% mutate(portafolio = .mean*weight*100)
#fcasts_sector = fcasts_symbol %>% aggregate_key(Sector/symbol, portafolio = sum(portafolio))
fcasts_sector = fcasts_symbol %>% group_by(Sector) %>% summarise(portafolio = sum(portafolio))
fcasts_sector
portafolio_fcst = fcasts_sector %>% summarise(portafolio = sum(portafolio))
portafolio_fcst

groups

data_agg = data %>% aggregate_key(Sector/symbol, portafolio = sum(portafolio))
data_agg %>% filter(is_aggregated(symbol)) %>% autoplot(portafolio) + facet_wrap(vars(Sector), scales = "free_y", ncol = 3) + theme(legend.position = "none")

if_else(ets<arima,
       if_else(ets<harmonic,
               if_else(ets<prophet,
                       ets,
                       if_else(arima<harmonic,
                               if_else(arima<prophet,
                                       arima, 
                                       if_else(harmonic<prophet,
                                               harmonic,
                                               prophet
                                               )
                                       ),
                               harmonic
                                ),
                       ),
               if_else(harmonic<prophet,
                       harmonic,
                       prophet
                       )
                ),
        if_else(arima<harmonic,
               if_else(arima<prophet,
                       arima, 
                       if_else(harmonic<prophet,
                               harmonic,
                               prophet
                               )
                       ),
               harmonic
                ))
[1] 53
LS0tCnRpdGxlOiAnTk5BUicKc3VidGl0bGU6ICdDbGFzZSBzZXJpZXMgZGUgdGllbXBvLCBwcmltYXZlcmEgMjAyNCcKYXV0aG9yOiAnRGFuaWVsIE51w7FvLCBkYW5pZWwubnVub0BpdGVzby5teCcKZGF0ZTogIkFicmlsIDI0LCAyMDI0IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgdGhlbWU6IGNvc21vCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgZ2l0aHViX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIGRldjoganBlZwogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgZGZfcHJpbnQ6IHBhZ2VkCi0tLQoKYGBge3Igc2V0dXAsIGVjaG8gPSBGQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICBmaWcuaGVpZ2h0ID0gNiwgZmlnLndpZHRoID0gNykKYGBgCgpgYGB7PWh0bWx9CjxzdHlsZT4KLmZvcmNlQnJlYWsgeyAtd2Via2l0LWNvbHVtbi1icmVhay1hZnRlcjogYWx3YXlzOyBicmVhay1hZnRlcjogY29sdW1uOyB9Cjwvc3R5bGU+CmBgYAohW10oaHR0cHM6Ly91cGxvYWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9kL2RiL0xvZ29fSVRFU09fbm9ybWFsLmpwZykKCgoKYGBge3J9CmxpYnJhcnkodGlkeXF1YW50KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeSh0c2liYmxlKQpsaWJyYXJ5KGZhYmxlKQpsaWJyYXJ5KGZlYXN0cykKYGBgCgpgYGB7cn0KaW5kZXggPSB0cV9pbmRleCgiU1A1MDAiKSAlPiUgc2VsZWN0KHN5bWJvbCwgd2VpZ2h0KQppbmRleCA9IGluZGV4ICU+JSBmaWx0ZXIoc3ltYm9sICE9ICItIikKaW5kZXgKc3VtKGluZGV4JHdlaWdodCkKCmRhdGEgPSB0cV9nZXQoaW5kZXgkc3ltYm9sLCBnZXQgPSAic3RvY2sucHJpY2VzIiwgZnJvbSA9ICIyMDIzLTAxLTAxIiwgdG8gPSAiMjAyNC0wMy0yOSIpICU+JSBzZWxlY3Qoc3ltYm9sLCBkYXRlLCBhZGp1c3RlZCkKYGBgCgoKYGBge3J9CmxpYnJhcnkocmVhZHhsKQpzZWN0b3JlcyA8LSByZWFkX2V4Y2VsKCJQcm95ZWN0b18yL3NlY3RvcmVzLnhsc3giKQpgYGAKCgpgYGB7cn0KaW5kZXggPSBsZWZ0X2pvaW4oaW5kZXgsIHNlbGVjdChTZWN0b3IsIGMoU3ltYm9sLCBTZWN0b3IpKSwgYnkgPSBqb2luX2J5KHN5bWJvbCA9PSBTeW1ib2wpKQpgYGAKCgpgYGB7cn0KaW5kZXggJT4lIGZpbHRlcihpZl9hbnkoZXZlcnl0aGluZygpLCBpcy5uYSkpCmBgYAoKCgoKYGBge3J9CnN5bWJvbHNfZnJvbV9kYXRhID0gdW5pcXVlKGRhdGEkc3ltYm9sKQpkYXRhID0gcGl2b3Rfd2lkZXIoZGF0YSwgaWRfY29scyA9IGRhdGUsIG5hbWVzX2Zyb20gPSBzeW1ib2wsIHZhbHVlc19mcm9tID0gYWRqdXN0ZWQpCmRhdGEgPSBtdXRhdGUoZGF0YSwgdCA9IHJvd19udW1iZXIoKSkKZGF0YSA9IHBpdm90X2xvbmdlcihkYXRhLCBhbGxfb2Yoc3ltYm9sc19mcm9tX2RhdGEpLCBuYW1lc190byA9ICJzeW1ib2wiLCB2YWx1ZXNfdG8gPSAiYWRqdXN0ZWQiKQpgYGAKCmBgYHtyfQpkYXRhCmBgYAoKCgoKYGBge3J9CmRhdGEgPSBkYXRhICU+JSBncm91cF9ieShzeW1ib2wpICU+JSBtdXRhdGUodCA9IHJvd19udW1iZXIoKSkKZGF0YSA9IGFzX3RzaWJibGUoZGF0YSwgaW5kZXggPSB0LCBrZXkgPSBzeW1ib2wpCmRhdGEKYGBgCmBgYHtyfQpkYXRhID0gbGVmdF9qb2luKGRhdGEsIGluZGV4LCBieSA9IGpvaW5fYnkoc3ltYm9sID09IHN5bWJvbCkpCmRhdGEKYGBgCgpgYGB7cn0KZGF0YSA9IGFzX3RzaWJibGUoZGF0YSwgaW5kZXggPSB0LCBrZXkgPSBzeW1ib2wpCmBgYAoKYGBge3J9CmRhdGEgPSBkYXRhICU+JSBtdXRhdGUocG9ydGFmb2xpbyA9IGFkanVzdGVkKndlaWdodCoxMDApCmBgYAoKYGBge3J9CmRhdGEKYGBgCgoKCmBgYHtyfQpmY2FzdHNfc3ltYm9sIDwtIGJlc3RfZml0ICU+JSBmb3JlY2FzdChoID0gMzApCmBgYAoKYGBge3J9CmZjYXN0c19zeW1ib2wKYGBgCgoKYGBge3J9CmZjYXN0c19zeW1ib2wgPSBsZWZ0X2pvaW4oZmNhc3RzX3N5bWJvbCwgc2VsZWN0KGluZGV4LCBjKHN5bWJvbCx3ZWlnaHQsIFNlY3RvcikpLCBieSA9IGpvaW5fYnkoc3ltYm9sID09IHN5bWJvbCkpCmZjYXN0c19zeW1ib2wgPSBmY2FzdHNfc3ltYm9sICU+JSBtdXRhdGUocG9ydGFmb2xpbyA9IC5tZWFuKndlaWdodCoxMDApCmBgYAoKCgpgYGB7cn0KI2ZjYXN0c19zZWN0b3IgPSBmY2FzdHNfc3ltYm9sICU+JSBhZ2dyZWdhdGVfa2V5KFNlY3Rvci9zeW1ib2wsIHBvcnRhZm9saW8gPSBzdW0ocG9ydGFmb2xpbykpCmZjYXN0c19zZWN0b3IgPSBmY2FzdHNfc3ltYm9sICU+JSBncm91cF9ieShTZWN0b3IpICU+JSBzdW1tYXJpc2UocG9ydGFmb2xpbyA9IHN1bShwb3J0YWZvbGlvKSkKZmNhc3RzX3NlY3RvcgpgYGAKCmBgYHtyfQpwb3J0YWZvbGlvX2Zjc3QgPSBmY2FzdHNfc2VjdG9yICU+JSBzdW1tYXJpc2UocG9ydGFmb2xpbyA9IHN1bShwb3J0YWZvbGlvKSkKcG9ydGFmb2xpb19mY3N0CmBgYAoKCiMgZ3JvdXBzCgpgYGB7cn0KZGF0YV9hZ2cgPSBkYXRhICU+JSBhZ2dyZWdhdGVfa2V5KFNlY3Rvci9zeW1ib2wsIHBvcnRhZm9saW8gPSBzdW0ocG9ydGFmb2xpbykpCmBgYAoKCmBgYHtyfQpkYXRhX2FnZyAlPiUgZmlsdGVyKGlzX2FnZ3JlZ2F0ZWQoc3ltYm9sKSkgJT4lIGF1dG9wbG90KHBvcnRhZm9saW8pICsgZmFjZXRfd3JhcCh2YXJzKFNlY3RvciksIHNjYWxlcyA9ICJmcmVlX3kiLCBuY29sID0gMykgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpCmBgYAoKYGBge3J9CmlmX2Vsc2UoZXRzPGFyaW1hLAogICAgICAgaWZfZWxzZShldHM8aGFybW9uaWMsCiAgICAgICAgICAgICAgIGlmX2Vsc2UoZXRzPHByb3BoZXQsCiAgICAgICAgICAgICAgICAgICAgICAgZXRzLAogICAgICAgICAgICAgICAgICAgICAgIGlmX2Vsc2UoYXJpbWE8aGFybW9uaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9lbHNlKGFyaW1hPHByb3BoZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaW1hLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfZWxzZShoYXJtb25pYzxwcm9waGV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhcm1vbmljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BoZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXJtb25pYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgaWZfZWxzZShoYXJtb25pYzxwcm9waGV0LAogICAgICAgICAgICAgICAgICAgICAgIGhhcm1vbmljLAogICAgICAgICAgICAgICAgICAgICAgIHByb3BoZXQKICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApLAogICAgICAgIGlmX2Vsc2UoYXJpbWE8aGFybW9uaWMsCiAgICAgICAgICAgICAgIGlmX2Vsc2UoYXJpbWE8cHJvcGhldCwKICAgICAgICAgICAgICAgICAgICAgICBhcmltYSwgCiAgICAgICAgICAgICAgICAgICAgICAgaWZfZWxzZShoYXJtb25pYzxwcm9waGV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFybW9uaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9waGV0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgaGFybW9uaWMKICAgICAgICAgICAgICAgICkpCmBgYAoK